/*
* WebOSTVMouseSocketConnection
* Connect SDK
*
* Copyright (c) 2014 LG Electronics.
* Created by Hyun Kook Khang on 19 Jan 2014
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.connectsdk.service.webos;
import java.net.URI;
import java.net.URISyntaxException;
import org.java_websocket.WebSocket.READYSTATE;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import android.util.Log;
public class WebOSTVMouseSocketConnection {
public interface WebOSTVMouseSocketListener {
void onConnected();
}
WebSocketClient ws;
String socketPath;
WebOSTVMouseSocketListener listener;
public enum ButtonType {
HOME,
BACK,
UP,
DOWN,
LEFT,
RIGHT,
}
public WebOSTVMouseSocketConnection(String socketPath, WebOSTVMouseSocketListener listener) {
Log.d("PtrAndKeyboardFragment", "got socketPath: " + socketPath);
this.listener = listener;
if (socketPath.startsWith("wss:")) {
this.socketPath = socketPath.replace("wss:", "ws:").replace(":3001/", ":3000/"); // downgrade to plaintext
Log.d("PtrAndKeyboardFragment", "downgraded socketPath: " + this.socketPath);
}
else
this.socketPath = socketPath;
try {
URI uri = new URI(this.socketPath);
connectPointer(uri);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
public void connectPointer(URI uri) {
if (ws != null) {
ws.close();
ws = null;
}
ws = new WebSocketClient(uri) {
@Override
public void onOpen(ServerHandshake arg0) {
Log.d("PtrAndKeyboardFragment", "connected to " + uri.toString());
if (listener != null) {
listener.onConnected();
}
}
@Override
public void onMessage(String arg0) {
}
@Override
public void onError(Exception arg0) {
}
@Override
public void onClose(int arg0, String arg1, boolean arg2) {
}
};
ws.connect();
}
public void disconnect() {
if (ws != null) {
ws.close();
ws = null;
}
}
public boolean isConnected() {
if (ws == null)
System.out.println("ws is null");
else if (ws.getReadyState() != READYSTATE.OPEN) {
System.out.println("ws state is not ready");
}
return (ws != null) && (ws.getReadyState() == READYSTATE.OPEN);
}
public void click() {
if (isConnected()) {
ws.send("type:click\n" + "\n");
}
}
public void button(ButtonType type) {
String keyName;
switch (type) {
case HOME:
keyName = "HOME";
break;
case BACK:
keyName = "BACK";
break;
case UP:
keyName = "UP";
break;
case DOWN:
keyName = "DOWN";
break;
case LEFT:
keyName = "LEFT";
break;
case RIGHT:
keyName = "RIGHT";
break;
default:
keyName = "NONE";
break;
}
button(keyName);
}
public void button(String keyName) {
if (isConnected()) {
ws.send("type:button\n" + "name:" + keyName + "\n" + "\n");
}
}
public void move(double dx, double dy) {
if (isConnected()) {
ws.send("type:move\n" + "dx:" + dx + "\n" + "dy:" + dy + "\n" + "down:0\n" + "\n");
}
}
public void move(double dx, double dy, boolean drag) {
if (isConnected()) {
ws.send("type:move\n" + "dx:" + dx + "\n" + "dy:" + dy + "\n" + "down:" + (drag ? 1 : 0) + "\n" + "\n");
}
}
public void scroll(double dx, double dy) {
if (isConnected()) {
ws.send("type:scroll\n" + "dx:" + dx + "\n" + "dy:" + dy + "\n" + "\n");
}
}
}